package com.ionehe.group.common.notify.message.consumer;

import com.ionehe.group.common.notify.message.listener.MessageListener;
import org.apache.rocketmq.common.consumer.ConsumeFromWhere;

/**
 * Copyright (c) 2021 ionehe.com
 * Date: 2021/4/21
 * Time: 1:19 下午
 *
 * @author 2021年 <a href="mailto:a@ionehe.com">秀</a>
 * 【消费者】
 */
public interface Consumer {
    /**
     * 启动
     */
    void start();

    /**
     * 关闭
     */
    void shutdown();

    /**
     * 订阅
     *
     * @param topic         主题
     * @param subExpression topic对应的tag
     * @param listener      消息监听器
     */
    void subscribe(String topic, String subExpression, MessageListener listener);

    /**
     * 取消订阅
     *
     * @param topic 主题
     */
    void unsubscribe(String topic);

    /**
     * 设置从哪里消费
     *
     * @param consumeFromWhere consumeFromWhere
     */
    void setConsumeFromWhere(ConsumeFromWhere consumeFromWhere);

    /**
     * 消费端是否启动
     *
     * @return 是或否
     */
    boolean isStarted();

    /**
     * 消费端是否已关闭
     *
     * @return 是或否
     */
    boolean isClosed();
}